嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,一樣有請今天的one piece:
昨天說完了一對多,接著要來說一下多對多的部分,一樣來個舉例:
在學校裡,一個班級會有很多個任教的老師,一個老師可以任教很多個班級,而確認哪個老師教哪個班級,會需要藉由課表來記錄。
昨天有講到, Rails 是以分上下屬的方式去實作 model 關聯性,若要變成多對多,則需要第三方的 modle 來幫忙做紀錄,也就是上面說的課表。
課表中會有兩個欄位,記錄老師的編號以及班級的編號。
class Curriculum < ActiveRecord
belongs_to :teacher
belongs_to :school_class
end
class Teacher < ActiveRecord
has_many :school_classes, through :curriculums
end
class SchoolClass < ActiveRecord::Base
has_many :teachers, through :curriculums
end
像這樣,設定的話,teacher跟schoolclass,就可以透過curriculum這個資料表存取到彼此,並互相擁有昨天說到的has_many方法:
teacher1 = Teacher.first
school_class1 = SchoolClass.first
# =====================#
teacher1.SchoolClasses #列出 teacher1 的所有 Schoolclass
SchoolClass1.teachers #列出 schoolclass1 的所有 teacher
(其他的就都不贅述啦,可以翻翻前一篇~)
若仔細觀察 console 裡的資訊,當寫下teacher1.SchoolClasses
,其實是會去 curriculums 這個資料表裡面撈東西的!
至於has_many 後面有什麼方式可以做設定,請先參考官方文件
我們要從部落格的分類功能開始切入了,其實就是要先增加一個 category 的 controller 及 model
rails g model Category name
接著來增加關聯,一篇文章上面有很多分類,而這個分類又會有很多的文章。
所以我們來增加第三方 model :rails g model Posts_categories post:references category:references
此時來看看,這個 model:
class PostsCategory < ApplicationRecord
belongs_to :post
belongs_to :category
end
目前資料表的關聯是:
接著去分別去 post 、 category 的 model
class Post < ActiveRecord
has_many :category, through :post_categories
end
class Category < ActiveRecord
has_many :posts, through :post_categories
end
此時的 model 關聯是:
這樣的話,在頁面中想要用分類來顯示出文章的話,只要使用:
categoy1 = Categoy.create(name:'ruby')
category1.posts
就可以囉~
感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!